#include <stdio.h>
#include <stdlib.h>

// 抽象的链表
// 有一块地方存数据，有一块地方存下一个结点的位置

// 单链表的逆转
// 将1 2 3 4 5 6 逆转为4 3 2 1 5 6(部分逆转)
typedef struct Node *Node;
struct Node
{
    int data;
    Node next;
};

Node Reverse(Node head, int K) // 将单链表的前k个结点逆转
{
    int count = 1;
    Node new, old; // 新链表的头节点，旧链表的头节点
    Node temp;     // 中间结点

    new = head->next;
    old = new->next;

    while (count < K)
    {
        temp = old->next;
        old->next = new;
        new = old;
        old = old->next;
        count++;
    }
    head->next->next = old;
    return new;
}
